package com.luban.aio;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;

/**
 *
 * 为什么Netty使用NIO而不是AIO？
 * 在Linux系统上，AIO的底层实现仍使用Epoll，没有很好实现AIO，因此在性能上没有明显的优势，
 * 而且被JDK封装了一层不容易深度优化，Linux上AIO还不够成熟。
 * Netty是异步非阻塞框架，Netty在NIO上做了很多异步的封装。
 * @ClassName AIOClient
 * @Description 498982703@qq.com
 * @Author gary
 * @Date 2021/2/19 13:33
 * @Version 1.0
 */
public class AIOClient {
    public static void main(String... args) throws Exception {
        AsynchronousSocketChannel socketChannel = AsynchronousSocketChannel.open();
        socketChannel.connect(new InetSocketAddress("127.0.0.1", 9000)).get();
        socketChannel.write(ByteBuffer.wrap("HelloServer".getBytes()));
        ByteBuffer buffer = ByteBuffer.allocate(512);
        Integer len = socketChannel.read(buffer).get();
        if (len != -1) {
            System.out.println("客户端收到信息：" + new String(buffer.array(), 0, len));
        }
    }
}
